home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-09-16 | 6.1 KB | 138 lines | [TEXT/CCL2] |
- (in-package :ccl)
-
- ; 12/19/91 bill (def-logical-directory ...) -> (setf (logical-pathname-translations ...))
- ; ------------- 2.0b4
- ; 4/8/91 joe patch-interfaces is a lot faster now, but still sort of broken
- ; one should still patch & check by hand!
- ;
-
- (defpackage :translate (:use :common-lisp))
- (defpackage :translate* (:use))
- (setf (logical-pathname-translations "translate")
- `(("translate:**;*.*"
- ,(concatenate 'string
- (mac-directory-namestring *loading-file-source-file*)
- "**:*.*"))))
- (let ((path (pathname "translate:")))
- (unless (member path *module-search-path* :test 'equal)
- (push path *module-search-path*)))
- (require 'new-traps)
- (require '411-reader)
- (require 'pasc-reader)
- (require '411-traps)
-
- ; translate a whole directory:
- ;
- (defun translate-all-pasc (&optional (flush t) (verbose t))
- (when flush
- (translate::flush-pasc-types))
- (with-open-file (warnings "translate:warnings.text"
- :direction :output :if-exists :supersede)
- (let ((*standard-output* (if verbose
- *standard-output*
- warnings)))
- (dolist (ifile (directory "translate:pinterfaces;*.p"))
- (unless (member (pathname-name ifile) translate::*translated-files*
- :test #'string-equal)
- (translate::translate-pasc-file :input-path ifile
- :output-path (merge-pathnames
- "ccl:interfaces;.lisp" ifile)))))))
-
- (defun translate-pasc-files (files &optional (ignore-includes t))
- (let ((pasc-path "translate:pinterfaces;.p")
- (lisp-path "ccl:interfaces;.lisp"))
- (dolist (f files)
- (translate::translate-pasc-file
- :input-path (merge-pathnames pasc-path f)
- :output-path (merge-pathnames lisp-path f)
- :dont-translate-includes ignore-includes))))
-
- ; This isn't quite right yet!
- (defun patch-interfaces (&key (animate t) (auto-save nil) (auto-close nil))
- (dolist (patch-path (directory "translate:patches;*.patch"))
- (patch-interface patch-path animate auto-save auto-close)))
-
- (defun patch-interface (patch-path animate auto-save auto-close)
- (let* ((interface-path (merge-pathnames "ccl:interfaces;.lisp" (pathname-name patch-path)))
- (fred-window (fred interface-path))
- (fred-buffer (fred-buffer fred-window))
- (*package* *traps-package*))
- (with-open-file (patch-stream patch-path)
- (loop
- (let* ((patch (read patch-stream nil nil))
- (item-name (cadr patch))
- (item-name-string nil)
- (position 0))
- (when (null patch) (return))
-
- (when (consp item-name)
- (setq item-name (car item-name)))
- (setq item-name-string (string item-name))
- (unless
- (loop
- (setq position
- (buffer-forward-search fred-buffer item-name-string position))
- (unless position
- (return nil))
- (when (eq (buffer-read fred-buffer
- (buffer-bwd-sexp fred-buffer position))
- item-name)
- (when animate
- (window-show-cursor fred-window position t))
- (let* ((start (ed-top-level-sexp-start-pos fred-buffer position)))
- (multiple-value-bind (form end)
- (buffer-read fred-buffer start)
- (when animate
- (set-selection-range fred-window end start)
- (fred-update fred-window))
- (when (and (eq item-name (cadr form))
- (compatible (car form) (car patch)))
- (buffer-delete fred-buffer start end)
- (let ((comment-start (buffer-line-start fred-buffer
- start -1))
- (comment-end (buffer-line-start fred-buffer
- start 1)))
- (when (and (eq (buffer-char fred-buffer comment-start) #\#)
- (eq (buffer-char fred-buffer (1+ comment-start)) #\|)
- (eq (buffer-char fred-buffer comment-end) #\|)
- (eq (buffer-char fred-buffer (1+ comment-end)) #\#))
- (buffer-delete fred-buffer comment-start
- (+ comment-end 2))
- (setq start comment-start)))
- (buffer-insert fred-buffer (let ((*print-pretty* t))
- (prin1-to-string patch))
- start)
- (return t))
- (incf position)))))
- (when animate
- (window-show-cursor fred-window (buffer-size fred-buffer) t))
- (buffer-insert fred-buffer (let ((*print-pretty* t))
- (prin1-to-string patch))
- (buffer-size fred-buffer))
- (buffer-insert fred-buffer #\newline (buffer-size fred-buffer))
- (when animate
- (window-show-cursor fred-window (buffer-size fred-buffer) t))))
- (when animate
- (fred-update fred-window))))
- (when auto-save (window-save fred-window))
- (when auto-close (window-close fred-window))
- ))
-
- (defun compatible (defx defy)
- (or (equal defx defy)
- (and (equal defx 'traps::def-mactype)
- (equal defy 'traps::defrecord))
- (and (equal defy 'traps::def-mactype)
- (equal defx 'traps::defrecord))))
-
- (defun do-translation-run ()
- (error "This doesn't really work!")
- (translate-all-pasc)
- (patch-interfaces)
- (copy-file "translate:replacements;types.lisp" "ccl:interfaces;types.lisp"
- :if-exists :supersede)
- (copy-file "translate:replacements;sane.lisp" "ccl:interfaces;sane.lisp"
- :if-exists :supersede)
- (delete-file "ccl:interfaces;traps.lisp")
- (reindex-interfaces))
-